package com.yabushan.system.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.yabushan.common.exception.CustomException;
import com.yabushan.common.utils.StringUtils;
import com.yabushan.system.domain.*;
import com.yabushan.system.domain.vo.YmxAsinTemplateInfoVo;
import com.yabushan.system.domain.vo.YmxGifiTemplateInfoVo;
import com.yabushan.system.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yabushan.system.mapper.YmxTemplateInfoMapper;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

/**
 * 礼物模板Service业务层处理
 *
 * @author yabushan
 * @date 2021-04-14
 */
@Service
public class YmxTemplateInfoServiceImpl implements IYmxTemplateInfoService {

    @Resource
    private YmxTemplateInfoMapper ymxTemplateInfoMapper;

    @Resource
    private IYmxGiftInfoService ymxGiftInfoService;

    @Resource
    private IYmxAsinTemplateInfoService ymxAsinTemplateInfoService;

    @Resource
    private IYmxGifiTemplateInfoService ymxGifiTemplateInfoService;

    /**
     * 查询礼物模板
     *
     * @param templateId 礼物模板ID
     * @return 礼物模板
     */
    @Override
    public YmxTemplateInfo selectYmxTemplateInfoById(String templateId) {
        return ymxTemplateInfoMapper.selectYmxTemplateInfoById(templateId);
    }

    @Override
    public List<YmxTemplateInfo> selectYmxTemplateInfoByName(String name){
        List<YmxTemplateInfo> list = ymxTemplateInfoMapper.selectYmxTemplateInfoByName(name);
        return list;
    }

    /**
     * 查询礼物模板列表
     *
     * @param ymxTemplateInfo 礼物模板
     * @return 礼物模板
     */
    @Override
    public List<YmxGifiTemplateInfoVo> selectYmxTemplateInfoList(YmxTemplateInfo ymxTemplateInfo) {
        List<YmxGifiTemplateInfoVo> list = new ArrayList<>();
        List<YmxTemplateInfo> ymxTemplateInfos = ymxTemplateInfoMapper.selectYmxTemplateInfoList(ymxTemplateInfo);
        int size = ymxTemplateInfos.size();
        if (size != 0) {
            for (int i = 0; i < size; i++) {
                YmxGifiTemplateInfoVo templateInfoVo = new YmxGifiTemplateInfoVo();
                YmxTemplateInfo templateInfo = ymxTemplateInfos.get(i);
                String templateId = templateInfo.getTemplateId();
                List<YmxGiftInfo> giftInfoList = ymxGiftInfoService.selectGiftByTemplateId(templateId);
                templateInfoVo.setGiftInfoList(giftInfoList);
                templateInfoVo.setTemplateId(templateId);
                templateInfoVo.setTemplateName(templateInfo.getTemplateName());
                list.add(templateInfoVo);
            }
        }
        return list;
    }

    /**
     * 新增礼物模板
     *
     * @param ymxGifiTemplateInfoVo 礼物模板
     * @return 结果
     */
    @Override
    public int insertYmxTemplateInfo(YmxGifiTemplateInfoVo ymxGifiTemplateInfoVo) {
        int result = 0;
        YmxTemplateInfo ymxTemplateInfo = new YmxTemplateInfo();
        String templateId = StringUtils.getUUID();
        List<YmxGiftInfo> giftInfoList = ymxGifiTemplateInfoVo.getGiftInfoList();
        int size = giftInfoList.size();
        if (size != 0) {
            for (int i = 0; i < size; i++) {
                YmxGiftInfo ymxGiftInfo = giftInfoList.get(i);
                String giftId = StringUtils.getUUID();
                String giftTemplateId = StringUtils.getUUID();
                ymxGiftInfo.setGiftId(giftId);
                result = ymxGiftInfoService.insertYmxGiftInfo(ymxGiftInfo);
                if (result == 0) {
                    throw new CustomException("新增礼物信息异常，请联系管理员！");
                }
                YmxGifiTemplateInfo ymxGifiTemplateInfo = new YmxGifiTemplateInfo();
                ymxGifiTemplateInfo.setGiftId(giftId);
                ymxGifiTemplateInfo.setTemplateId(templateId);
                ymxGifiTemplateInfo.setGiftTemplateId(giftTemplateId);
                result = ymxGifiTemplateInfoService.insertYmxGifiTemplateInfo(ymxGifiTemplateInfo);
                if (result == 0) {
                    throw new CustomException("新增礼物模板关系信息异常，请联系管理员！");
                }
            }
        }
        ymxTemplateInfo.setTemplateId(templateId);
        ymxTemplateInfo.setTemplateName(ymxGifiTemplateInfoVo.getTemplateName());
        result = ymxTemplateInfoMapper.insertYmxTemplateInfo(ymxTemplateInfo);
        return result;
    }

    /**
     * 修改礼物模板
     *
     * @param ymxTemplateInfo 礼物模板
     * @return 结果
     */
    @Override
    public int updateYmxTemplateInfo(YmxTemplateInfo ymxTemplateInfo) {
        return ymxTemplateInfoMapper.updateYmxTemplateInfo(ymxTemplateInfo);
    }

    /**
     * 批量删除礼物模板
     *
     * @param templateIds 需要删除的礼物模板ID
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = {Exception.class}, propagation = Propagation.REQUIRED)
    public int deleteYmxTemplateInfoByIds(String[] templateIds) {
        int result = 0;
        int length = templateIds.length;
        for (int i = 0; i < length; i++) {
            String id = templateIds[i];
           // List<YmxGifiTemplateInfo> templateInfoList = ymxGifiTemplateInfoService.selectYmxTemplateInfoById(id);
            YmxAsinTemplateInfo ymxAsinTemplateInfo=new YmxAsinTemplateInfo();
            ymxAsinTemplateInfo.setTemplateId(id);
            List<YmxAsinTemplateInfo> templateInfoList1 = ymxAsinTemplateInfoService.selectYmxAsinTemplateInfoList(ymxAsinTemplateInfo);
            if (templateInfoList1.size() != 0) {
                throw new CustomException("删除礼物模板失败，该礼物模板目前正在使用中，无法进行删除！");
            }
            result = ymxTemplateInfoMapper.deleteYmxTemplateInfoByIds(templateIds);
            if (result == 0) {
                throw new CustomException("删除礼物模板失败，请联系系统管理员！");
            }
        }
        return result;
    }

    /**
     * 删除礼物模板信息
     *
     * @param templateId 礼物模板ID
     * @return 结果
     */
    @Override
    public int deleteYmxTemplateInfoById(String templateId) {
        return ymxTemplateInfoMapper.deleteYmxTemplateInfoById(templateId);
    }

    /**
     * 修改礼物模板对应礼物
     *
     * @param ymxTemplateInfo
     * @return
     */
    @Override
    public int updateYmxTemplateByGiftInfo(YmxGifiTemplateInfoVo ymxTemplateInfo) {
        int result = 0;
        String templateId = ymxTemplateInfo.getTemplateId();
        List<YmxGifiTemplateInfo> gifiTemplateInfo = ymxGifiTemplateInfoService.selectYmxTemplateInfoById(templateId);
        if (gifiTemplateInfo.size()>0) {
            result = ymxGifiTemplateInfoService.deleteYmxTemplateInfoById(templateId);
            if (result == 0) {
                throw new CustomException("删除礼物模板信息异常，请联系管理员！");
            }
        }
        List<YmxGiftInfo> giftInfoList = ymxTemplateInfo.getGiftInfoList();
        int size = giftInfoList.size();
        if (size != 0) {
            for (int i = 0; i < size; i++) {
                YmxGiftInfo ymxGiftInfo = giftInfoList.get(i);
                String giftId = StringUtils.getUUID();
                String giftTemplateId = StringUtils.getUUID();
                ymxGiftInfo.setGiftId(giftId);
                result = ymxGiftInfoService.insertYmxGiftInfo(ymxGiftInfo);
                if (result == 0) {
                    throw new CustomException("新增礼物信息异常，请联系管理员！");
                }
                YmxGifiTemplateInfo ymxGifiTemplateInfo = new YmxGifiTemplateInfo();
                ymxGifiTemplateInfo.setGiftId(giftId);
                ymxGifiTemplateInfo.setTemplateId(templateId);
                ymxGifiTemplateInfo.setGiftTemplateId(giftTemplateId);
                result = ymxGifiTemplateInfoService.insertYmxGifiTemplateInfo(ymxGifiTemplateInfo);
                if (result == 0) {
                    throw new CustomException("新增礼物模板关系信息异常，请联系管理员！");
                }
            }
        }
        return result;
    }

    /**
     * 查询礼物模板名称列表
     * @return
     */
    @Override
    public Map<String, String> selectYmxTemplateInfomapName() {
        Map<String, String> map = new HashMap<>();
        List<YmxTemplateInfo> list = ymxTemplateInfoMapper.selectYmxTemplateInfomapName();
        int size = list.size();
        if (size != 0) {
            for (int i = 0; i < size; i++) {
                YmxTemplateInfo ymxTemplateInfo = list.get(i);
                map.put(ymxTemplateInfo.getTemplateName(),ymxTemplateInfo.getTemplateId());
            }
        }
        return map;
    }
}
